package com.xu.lambda;


import java.util.ArrayList;
import java.util.List;

/**
 * lambda表达式理解为可传递的匿名函数的一种方式 ：没有名称 但是有参数列表 函数主体 返回类型
 * @author xudenghui
 * @create 2023-04-05 13:10
 **/
public class Demo1 {

    public static void main(String[] args) {
        
//        method1();

        method2();

        method3();

    }

    private static void method3() {

        List<String> list = new ArrayList();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        String str = "6";
//        str = "7";
        list.forEach(item->{
            System.out.println(item);
            System.out.println(str);
        });


    }


    /**
     * 匿名内部类
     * 代码分析
     * 1：Thread类需要一个Runnable接口作为参数  其中的抽象方法Run方法是用来指定线程任务内容的核心 （内部类）
     * 2：为了执行run方法体 不得不需要runnable的实现类
     * 3：必须覆盖重写run方法 所有的方法名称 方法参数 方法返回值都一样
     * 4：实际上  我们只在乎方法体中的代码
     */
    private static void method1() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("新线程中执行的代码:"+ Thread.currentThread().getName());
            }
        }).start();
        System.out.println("主线程中的代码"+Thread.currentThread().getName());
    }





    /**
     * 实际上  我们只在乎方法体中的代码 (lambda执行)
     *  lambda 表达式是一个匿名函数，可以理解为一段可以传递的代码
     *  lambda的优点：简化了匿名内部类的使用，语法更加简单
     *
     *     Runnable runnable = ()-> System.out.println("ssss");
     *     Thread thread = new Thread(runnable);
     *     thread.start();
     */
    private static void method2() {
        new Thread(()-> {
          System.out.println("新线程中执行的代码:"+ Thread.currentThread().getName());
        }).start();
        System.out.println("主线程中的代码"+Thread.currentThread().getName());
    }



}
